iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
0
自我挑戰組

Go從新學系列 第 17

[DAY 17]GO 的 函式(三)

  • 分享至 

  • xImage
  •  
  • 模擬預設變數

Go 的函式本身不支援預設變數,但我們可以透過傳入結構的方式模擬預設變數,如下例:

package main

import "log"

type Color int

const (
	White Color = iota
	Black
	Green
	Yellow
)

type Size int

const (
	Large Size = iota
	Middle
	Small
	ExtraLarge
)

type Clothes struct {
	color Color
	size  Size
}

type Param struct {
	Color Color
	Size  Size
}

func MakeClothes(param Param) *Clothes {
	c := new(Clothes)

	c.color = param.Color
	c.size = param.Size

	return c
}

func main() {
	// Clothes with custom parameters
	c1 := MakeClothes(Param{Color: Black, Size: Middle})

	if !(c1.color == Black) {
		log.Fatal("Wrong color")
	}

	if !(c1.size == Middle) {
		log.Fatal("Wrong size")
	}

	// Clothes with default parameters
	c2 := MakeClothes(Param{})

	if !(c2.color == White) {
		log.Fatal("Wrong color")
	}

	if !(c2.size == Large) {
		log.Fatal("Wrong size")
	}
}

來源:Michael Chen

const 就是英文裡 常數(constant)的意思

先設定一個常數函數

裡面的 iota 是常數計數器

iota在const關鍵字出現時將被重置為0(const內部的第一行之前),const中每新增一行常量聲明將使iota計數一次(iota可理解為const語句塊中的行索引)。

可以想像iota就是用來設定常數區塊的索引值

type Stereotype int

const (
    TypicalNoob Stereotype = iota // 0
    TypicalHipster                // 1
    TypicalUnixWizard             // 2
    TypicalStartupFounder         // 3
)
  • init 函式

init 函式是一個特殊的函式,若程式碼內有 init 會在程式一開始執行的時候呼叫該函式,順序在 main 函式之前。通常 init 函式都是用來初始化一些外部資源。以下是一個摘自 Go 官方網站的例子:

func init() {
    if user == "" {
        log.Fatal("$USER not set")
    }
    if home == "" {
        home = "/home/" + user
    }
    if gopath == "" {
        gopath = home + "/go"
    }
    // gopath may be overridden by --gopath flag on command line.
    flag.StringVar(&gopath, "gopath", gopath, "override default GOPATH")
}

Go官方來源


https://ithelp.ithome.com.tw/upload/images/20191003/20121032MyhqEfXhlB.png


上一篇
[DAY 16]GO 的 函式(二)
下一篇
[DAY 18]GO 的 Defer
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言